home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 1 / ETO Development Tools 1.iso / Essentials / Developer Essentials Jul 90 / Programming / MPW Interfaces & Libraries 3.1 / PInterfaces / Sound.p < prev    next >
Encoding:
Text File  |  1989-10-13  |  4.9 KB  |  234 lines  |  [TEXT/MPS ]

  1. {
  2. Created: Wednesday, October 26, 1988 at 11:39 PM
  3.     Sound.p
  4.     Pascal Interface to the Macintosh Libraries
  5.  
  6.     Copyright Apple Computer, Inc.    1986-1988
  7.     All rights reserved
  8. }
  9.  
  10.  
  11. {$IFC UNDEFINED UsingIncludes}
  12. {$SETC UsingIncludes := 0}
  13. {$ENDC}
  14.  
  15. {$IFC NOT UsingIncludes}
  16.     UNIT Sound;
  17.     INTERFACE
  18. {$ENDC}
  19.  
  20. {$IFC UNDEFINED UsingSound}
  21. {$SETC UsingSound := 1}
  22.  
  23. {$I+}
  24. {$SETC SoundIncludes := UsingIncludes}
  25. {$SETC UsingIncludes := 1}
  26. {$IFC UNDEFINED UsingTypes}
  27. {$I $$Shell(PInterfaces)Types.p}
  28. {$ENDC}
  29. {$SETC UsingIncludes := SoundIncludes}
  30.  
  31. CONST
  32. swMode = -1;
  33. ftMode = 1;
  34. ffMode = 0;
  35. synthCodeRsrc = 'snth';
  36. soundListRsrc = 'snd ';
  37.  
  38. { synthesizer numbers for SndNewChannel }
  39.  
  40. noteSynth = 1;                {note synthesizer}
  41. waveTableSynth = 3;         {wave table synthesizer}
  42. sampledSynth = 5;            {sampled sound synthesizer}
  43. midiSynthIn = 7;            {MIDI synthesizer in}
  44. midiSynthOut = 9;            {MIDI synthesizer out}
  45.  
  46. { Param2 values }
  47.  
  48. midiInitChanFilter = $10;    {set to initialize a MIDI channel}
  49. midiInitRawMode = $100;     {set to send raw MIDI data}
  50. twelthRootTwo = 1.05946309434;
  51. infiniteTime = $7FFFFFFF;
  52.  
  53. { command numbers for SndDoCommand }
  54.  
  55. nullCmd = 0;
  56. initCmd = 1;
  57. freeCmd = 2;
  58. quietCmd = 3;
  59. flushCmd = 4;
  60. waitCmd = 10;
  61. pauseCmd = 11;
  62. resumeCmd = 12;
  63. callBackCmd = 13;
  64. syncCmd = 14;
  65. emptyCmd = 15;
  66. tickleCmd = 20;
  67. requestNextCmd = 21;
  68. howOftenCmd = 22;
  69. wakeUpCmd = 23;
  70. availableCmd = 24;
  71. versionCmd = 25;
  72. scaleCmd = 30;
  73. tempoCmd = 31;
  74. noteCmd = 40;
  75. restCmd = 41;
  76. freqCmd = 42;
  77. ampCmd = 43;
  78. timbreCmd = 44;
  79. waveTableCmd = 60;
  80. phaseCmd = 61;
  81. soundCmd = 80;
  82. bufferCmd = 81;
  83. rateCmd = 82;
  84. midiDataCmd = 100;
  85. setPtrBit = $8000;
  86. stdQLength = 128;
  87. dataPointerFlag = $8000;
  88. initChanLeft = 2;            {left stereo channel }
  89. initChanRight = 3;            {right stereo channel}
  90. initChan0 = 4;                {channel 0 - wave table only}
  91. initChan1 = 5;                {channel 1 - wave table only}
  92. initChan2 = 6;                {channel 2 - wave table only}
  93. initChan3 = 7;                {channel 3 - wave table only}
  94. initSRate22k = $20;         {22k sampling rate}
  95. initSRate44k = $30;         {44k sampling rate}
  96. initMono = $80;             {monophonic channel}
  97. initStereo = $C0;            {stereo channel}
  98. firstSoundFormat = 1;        {first and only version we can deal with}
  99.  
  100.  
  101. TYPE
  102.  
  103.  
  104. FreeWave = PACKED ARRAY [0..30000] OF Byte;
  105.  
  106. FFSynthPtr = ^FFSynthRec;
  107. FFSynthRec = RECORD
  108.     mode: INTEGER;
  109.     count: Fixed;
  110.     waveBytes: FreeWave;
  111.     END;
  112.  
  113. Tone = RECORD
  114.     count: INTEGER;
  115.     amplitude: INTEGER;
  116.     duration: INTEGER;
  117.     END;
  118.  
  119. Tones = ARRAY [0..5000] OF Tone;
  120.  
  121. SWSynthPtr = ^SWSynthRec;
  122. SWSynthRec = RECORD
  123.     mode: INTEGER;
  124.     triplets: Tones;
  125.     END;
  126.  
  127. Wave = PACKED ARRAY [0..255] OF Byte;
  128.  
  129. WavePtr = ^Wave;
  130.  
  131. FTSndRecPtr = ^FTSoundRec;
  132. FTSoundRec = RECORD
  133.     duration: INTEGER;
  134.     sound1Rate: Fixed;
  135.     sound1Phase: LONGINT;
  136.     sound2Rate: Fixed;
  137.     sound2Phase: LONGINT;
  138.     sound3Rate: Fixed;
  139.     sound3Phase: LONGINT;
  140.     sound4Rate: Fixed;
  141.     sound4Phase: LONGINT;
  142.     sound1Wave: WavePtr;
  143.     sound2Wave: WavePtr;
  144.     sound3Wave: WavePtr;
  145.     sound4Wave: WavePtr;
  146.     END;
  147.  
  148. FTSynthPtr = ^FTSynthRec;
  149. FTSynthRec = RECORD
  150.     mode: INTEGER;
  151.     sndRec: FTSndRecPtr;
  152.     END;
  153.  
  154. SndCommand = PACKED RECORD
  155.     cmd: INTEGER;
  156.     param1: INTEGER;
  157.     param2: LONGINT;
  158.     END;
  159.  
  160. Time = LONGINT;
  161.  
  162. ModifierStubPtr = ^ModifierStub;
  163. ModifierStub = PACKED RECORD
  164.     nextStub: ModifierStubPtr;
  165.     code: ProcPtr;
  166.     userInfo: LONGINT;
  167.     count: Time;
  168.     every: Time;
  169.     flags: SignedByte;
  170.     hState: SignedByte;
  171.     END;
  172.  
  173. SndChannelPtr = ^SndChannel;
  174. SndChannel = PACKED RECORD
  175.     nextChan: SndChannelPtr;
  176.     firstMod: ModifierStubPtr;
  177.     callBack: ProcPtr;
  178.     userInfo: LONGINT;
  179.     wait: Time;             {The following is for internal Sound Manager use only.}
  180.     cmdInProgress: SndCommand;
  181.     flags: INTEGER;
  182.     qLength: INTEGER;
  183.     qHead: INTEGER;         {next spot to read or -1 if empty}
  184.     qTail: INTEGER;         {next spot to write = qHead if full}
  185.     queue: ARRAY [0..127] OF SndCommand;
  186.     END;
  187.  
  188. SoundHeaderPtr = ^SoundHeader;
  189. SoundHeader = RECORD
  190.     samplePtr: Ptr;         {if NIL then samples are in sampleArea}
  191.     length: LONGINT;
  192.     sampleRate: Fixed;
  193.     loopStart: LONGINT;
  194.     loopEnd: LONGINT;
  195.     baseNote: INTEGER;
  196.     sampleArea: PACKED ARRAY [0..0] OF Byte;
  197.     END;
  198.  
  199. ModRef = RECORD
  200.     modNumber: INTEGER;
  201.     modInit: LONGINT;
  202.     END;
  203.  
  204.  
  205.  
  206. FUNCTION SndDoCommand(chan: SndChannelPtr;cmd: SndCommand;noWait: BOOLEAN): OSErr;
  207.     INLINE $A803;
  208. FUNCTION SndDoImmediate(chan: SndChannelPtr;cmd: SndCommand): OSErr;
  209.     INLINE $A804;
  210. FUNCTION SndNewChannel(VAR chan: SndChannelPtr;synth: INTEGER;init: LONGINT;
  211.     userRoutine: ProcPtr): OSErr;
  212.     INLINE $A807;
  213. FUNCTION SndDisposeChannel(chan: SndChannelPtr;quietNow: BOOLEAN): OSErr;
  214.     INLINE $A801;
  215. FUNCTION SndPlay(chan: SndChannelPtr;sndHdl: Handle;async: BOOLEAN): OSErr;
  216.     INLINE $A805;
  217. FUNCTION SndControl(id: INTEGER;VAR cmd: SndCommand): OSErr;
  218.     INLINE $A806;
  219. PROCEDURE SetSoundVol(level: INTEGER);
  220. PROCEDURE GetSoundVol(VAR level: INTEGER);
  221. PROCEDURE StartSound(synthRec: Ptr;numBytes: LONGINT;completionRtn: ProcPtr);
  222. PROCEDURE StopSound;
  223. FUNCTION SoundDone: BOOLEAN;
  224. FUNCTION SndAddModifier(chan: SndChannelPtr;modifier: ProcPtr;id: INTEGER;
  225.     init: LONGINT): OSErr;
  226.     INLINE $A802;
  227.  
  228. {$ENDC}    { UsingSound }
  229.  
  230. {$IFC NOT UsingIncludes}
  231.     END.
  232. {$ENDC}
  233.  
  234.